<?php
/**
 * 临时素材 管理
 *
 * @author    Alex Xun xunzhibin@expert.com
 * @version   1.0
 * @copyright (C) 2018 Jnexpert Ltd. All rights reserved
 * @file      material\controller\v1\Temporary.php
 */

namespace app\material\controller\v1;

use controller\BasicWechat;

/**
 * 临时素材 控制器类型
 *
 * @author Alex Xun xunzhibin@jnexpert.com
 * @package controller
 */
class Temporary extends BasicWechat
{
    /**
     * 公众号 第三方库 初始化
     *
     * 根据具体所需服务，实例不同的接口类
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    protected function initVendor()
    {
        // 实例化 第三方库
        $this->wechat = new \WeChat\Media($this->config);
    }

    /**
     * 下载
     *
     * 下载临时多媒体文件
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function download()
    {
        // 获取
        $result = $this->wechat->get($this->data['media_id']);

        // 视频
        if(is_array($result)) {
            header('Location: ' . $result['video_url']);
            exit;
        }

        // 从二进制字符串对数据进行解包
        $info = @unpack("C2chars", $result);
        // 拼接值，并取整
        $code = intval($info['chars1'] . $info['chars2']);

        // 文件类型配置
        $extCodeConfig = [
            7790 => 'exe',
            7784 => 'midi',
            8075 => 'zip',
            8297 => 'rar',
            255216 => 'jpg',
            7173 => 'gif',
            6677 => 'bmp',
            13780 => 'png'
        ];
        $ext = isset($extCodeConfig[$code]) ? '.' . $extCodeConfig[$code] : '';

        // 告诉浏览器这是一个文件流格式的文件
        Header("Content-type: application/octet-stream");

        //请求范围的度量单位
        Header ( "Accept-Ranges: bytes" );
        //Content-Length是指定包含于请求或响应中数据的字节长度
        // Header ( "Accept-Length: " . filesize ($result) );
        //用来告诉浏览器，文件是可以当做附件被下载，下载后的文件名称为$file_name该变量的值。
        Header ( "Content-Disposition: attachment; filename=" . $this->data['media_id'] . $ext);
        echo $result;
        exit;
    }

    /**
     * 新增
     *
     * 上传临时多媒体文件
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function create()
    {
        // 上传文件
        if(! $this->uploadSaveFile) {
            throw new \think\exception\ValidateException('Upload file not exist');
        }

        // 新增
        $result = $this->wechat->add($this->uploadSaveFile, $this->data['type']);

        return $this->response($result, true);
    }
}
